package io.tec.cloud.algorithm;

import java.util.Set;
import java.util.stream.Collectors;
import java.util.stream.Stream;

public class RandomAlgorithm {

    private final static String[] questions = {
            "1	01_1	01	1	01认识复杂度、对数器、二分法	选择排序",
            "2	01_2	01	2	01认识复杂度、对数器、二分法	冒泡排序",
            "3	01_3	01	3	01认识复杂度、对数器、二分法	插入排序",
            "4	01_4	01	4	01认识复杂度、对数器、二分法	在一个有序数组中，找某个数是否存在",
            "5	01_5	01	5	01认识复杂度、对数器、二分法	在一个有序数组中，找大于等于某个数最左侧的位置",
            "6	01_6	01	6	01认识复杂度、对数器、二分法	在一个有序数组中，找小于等于某个数最右侧的位置",
            "7	01_7	01	7	01认识复杂度、对数器、二分法	局部最小值问题",
            "8	02_1	02	1	02异或运算相关面试题	如何不用额外变量交换两个数",
            "9	02_2	02	2	02异或运算相关面试题	一个数组中出现了奇数次的数",
            "10	02_3	02	3	02异或运算相关面试题	提取整形数最右侧的1",
            "11	02_4	02	4	02异或运算相关面试题	一个数组中出现奇数次的两个数",
            "12	02_5	02	5	02异或运算相关面试题	一个数组中有一种数出现K次，其他数都出现了M次",
            "13	03_1	03	1	03链表结构、栈、队列、递归行为、哈希表和有序表	单链表和双链表如何反转",
            "14	03_2	03	2	03链表结构、栈、队列、递归行为、哈希表和有序表	把链表中的给定值都删除",
            "15	03_3	03	3	03链表结构、栈、队列、递归行为、哈希表和有序表	循环数组实现栈",
            "16	03_4	03	4	03链表结构、栈、队列、递归行为、哈希表和有序表	循环数组实现队列",
            "17	03_5	03	5	03链表结构、栈、队列、递归行为、哈希表和有序表	双向链表实现栈和队列",
            "18	03_6	03	6	03链表结构、栈、队列、递归行为、哈希表和有序表	双向链表实现双端队列",
            "19	03_7	03	7	03链表结构、栈、队列、递归行为、哈希表和有序表	实现有getMin功能的栈",
            "20	03_8	03	8	03链表结构、栈、队列、递归行为、哈希表和有序表	如何用栈结构实现队列结构",
            "21	03_9	03	9	03链表结构、栈、队列、递归行为、哈希表和有序表	如何用单向队列结构实现栈结构",
            "22	03_10	03	10	03链表结构、栈、队列、递归行为、哈希表和有序表	用递归方法求数组中的最大值",
            "23	03_11	03	11	03链表结构、栈、队列、递归行为、哈希表和有序表	递归-Master公式",
            "24	03_12	03	12	03链表结构、栈、队列、递归行为、哈希表和有序表	哈希表",
            "25	03_13	03	13	03链表结构、栈、队列、递归行为、哈希表和有序表	有序表",
            "26	04_1	04	1	04归并排序及其相关面试题	归并排序-递归版本",
            "27	04_2	04	2	04归并排序及其相关面试题	归并排序-非递归版本（迭代版本）",
            "28	04_3	04	3	04归并排序及其相关面试题	求数组小和：每个数左边有多少个数比它小/每个数右边有多少个数比它大",
            "29	04_4	04	4	04归并排序及其相关面试题	求数组中的逆序对数量：每个数右边有多少个数比他小",
            "30	04_5	04	5	04归并排序及其相关面试题	在一个数组中，对于每个数num，求有多少个后面的数*2依然<num，求总个数",
            "31	05_1	05	1	05归并排序附加题、随机快速排序	327.区间和的个数",
            "32	05_2	05	2	05归并排序附加题、随机快速排序	O(N)复杂度完成荷兰国旗问题：小于等于X的放左边，大于X的放右边",
            "33	05_3	05	3	05归并排序附加题、随机快速排序	O(N)复杂度完成荷兰国旗问题：小于X的放左边，等于X的放中间，大于X的放右边",
            "34	05_4	05	4	05归并排序附加题、随机快速排序	O(N)复杂度完成荷兰国旗问题：小于等于X的放左边，大于X的放右边，并返回等于X的区间",
            "35	05_5	05	5	05归并排序附加题、随机快速排序	快速排序1.0",
            "36	05_6	05	6	05归并排序附加题、随机快速排序	快速排序2.0",
            "37	05_7	05	7	05归并排序附加题、随机快速排序	快速排序3.0-随机快排",
            "38	05_8	05	8	05归并排序附加题、随机快速排序	快速排序3.0-非递归版本-栈",
            "39	05_9	05	9	05归并排序附加题、随机快速排序	快速排序3.0-非递归版本-队列",
            "40	05_10	05	10	05归并排序附加题、随机快速排序	快速排序3.0-非递归版本-双向链表",
            "41	05_11	05	11	05归并排序附加题、随机快速排序	快速排序3.0-非递归版本-双向链表-code附加，双向链表进行快速排序的code实现",
            "42	06_1	06	1	06比较器、堆结构、堆排序	手写堆",
            "43	06_2	06	2	06比较器、堆结构、堆排序	堆排序",
            "44	06_3	06	3	06比较器、堆结构、堆排序	相对几乎有序数组排序（原始数组的每个元素的位置和排序好后的位置不超过K）",
            "45	07_1	07	1	07与堆相关的面试题、加强堆的设计	最大线段重合问题-堆实现|最大线段重合问题-暴力解法",
            "46	07_2	07	2	07与堆相关的面试题、加强堆的设计	最大线段重合问题-堆实现|最大线段重合问题",
            "47	07_3	07	3	07与堆相关的面试题、加强堆的设计	给购买次数最多的前K名用户颁奖",
            "48	08_1	08	1	08前缀树trie、不基于比较的排序(桶排序)、排序稳定性、排序总结	固定数组实现前缀树",
            "49	08_2	08	2	08前缀树trie、不基于比较的排序(桶排序)、排序稳定性、排序总结	哈希表实现前缀树",
            "50	08_3	08	3	08前缀树trie、不基于比较的排序(桶排序)、排序稳定性、排序总结	计数排序",
            "51	08_4	08	4	08前缀树trie、不基于比较的排序(桶排序)、排序稳定性、排序总结	基数排序代码",
            "52	09_1	09	1	09排序总结、链表相关面试题	在整型数组中，请把奇数放在数组左边，偶数放在数组右边，要求所有奇数之间原始的相对次序不变，所有偶数之间原始相对次序不变。",
            "53	09_2	09	2	09排序总结、链表相关面试题	数个数或者快慢指针4个练习题",
            "54	09_3	09	3	09排序总结、链表相关面试题	判断链表是否为回文结构",
            "55	09_4	09	4	09排序总结、链表相关面试题	链表改序问题：链表结构为L1L2L3L4R1R2R3R4，改为L1R4L2R3L3R2L4R1",
            "56	09_5	09	5	09排序总结、链表相关面试题	将单向链表按某值划分成左边小、中间相等、右边大的形式",
            "57	09_6	09	6	09排序总结、链表相关面试题	深度复制带有rand指针的链表：rand指针是单链表节点结构中新增的指针，rand可能指向链表中的任意一个节点，也可能指向null。",
            "58	10_1	10	1	10二叉树常见面试题（上）	两个可能有环的单链表相交的第一个节点",
            "59	10_2	10	2	10二叉树常见面试题（上）	二叉树某一节点X祖先节点的交集",
            "60	10_3	10	3	10二叉树常见面试题（上）	非递归方式实现二叉树的三序遍历",
            "61	11_1	11	1	11二叉树常见面试题（下）	不给头结点,删除单链表上的节点",
            "62	11_2	11	2	11二叉树常见面试题（下）	实现二叉树的按层遍历",
            "63	11_3	11	3	11二叉树常见面试题（下）	二叉树的序列化和反序列化",
            "64	11_4	11	4	11二叉树常见面试题（下）	43将N叉树编码为二叉树",
            "65	11_5	11	5	11二叉树常见面试题（下）	如何设计一个打印整棵树的打印函数",
            "66	11_6	11	6	11二叉树常见面试题（下）	求二叉树最宽的层有多少个节点",
            "67	11_7	11	7	11二叉树常见面试题（下）	二叉树中指定节点的后继节点",
            "68	11_8	11	8	11二叉树常见面试题（下）	从上到下打印对折纸条所有折痕的方向",
            "69	12_1	12	1	12二叉树递归套路解决树型dp类问题	判断二叉树是不是平衡二叉树",
            "70	12_2	12	2	12二叉树递归套路解决树型dp类问题	判断二叉树是不是满二叉树",
            "71	12_3	12	3	12二叉树递归套路解决树型dp类问题	判断二叉树是不是搜索二叉树",
            "72	12_4	12	4	12二叉树递归套路解决树型dp类问题	二叉树中最大的二叉搜索子树的大小",
            "73	13_1	13	1	13贪心算法（上）	判断二叉树是不是完全二叉树",
            "74	13_2	13	2	13贪心算法（上）	二叉树中最大的二叉搜索子树的头节点",
            "75	13_3	13	3	13贪心算法（上）	二叉树上两个节点的最低公共祖先",
            "76	13_4	13	4	13贪心算法（上）	求二叉树两个节点的最大距离",
            "77	13_5	13	5	13贪心算法（上）	派对的最大快乐值",
            "78	13_6	13	6	13贪心算法（上）	字符串组成的数组拼接后字典序最小的结果",
            "79	14_1	14	1	14贪心算法（下）	会议室能容纳的最多宣讲场次",
            "80	14_2	14	2	14贪心算法（下）	金条分割的最小代价",
            "81	14_3	14	3	14贪心算法（下）	点亮str中所有需要点亮的位置至少需要几盏灯",
            "82	14_4	14	4	14贪心算法（下）	做项目获得的最大钱数",
            "83	15_1	15	1	15并查集及其面试题目	547.朋友圈",
            "84	15_2	15	2	15并查集及其面试题目	岛屿数量|岛问题",
            "85	15_3	15	3	15并查集及其面试题目	305.岛屿数量II",
            "86	15_4	15	4	15并查集及其面试题目	1.岛问题并行算法",
            "87	16_1	16	1	16图及其常见算法	图的拓扑排序算法",
            "88	16_2	16	2	16图及其常见算法	最小生成树算法之Kruskal",
            "89	16_3	16	3	16图及其常见算法	最小生成树算法之Prim",
            "90	16_4	16	4	16图及其常见算法	Dijkstra算法"
    };

    public static void main(String[] args) {
        final Set<Integer> tested = Stream.of(52, 61, 28, 27, 43, 35, 23, 29, 7, 33, 62, 86, 58/*, 53*/, 68, 80, 14).collect(Collectors.toSet());
        int id = -1;
        do {
            // 1-90
            id = AlgorithmUtil.random(90);
        } while (tested.contains(id));
        System.out.println("本次测试的题目为" + id + "：" + questions[id - 1]);
    }
}
